/* This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package Modelo;

//~--- JDK imports ------------------------------------------------------------

import java.util.Iterator;
import java.util.Vector;

/**
 * Metodo que representa una accion general que se puede ejecutar automaticamente tras encontrar un programa o fichero
 * @author Armando MAchuca Llorente
 */
public class Accion {
    /**
     * Campo de texto que explica que realiza una accion
     */
    public String            _explicacionAccion;
    /**
     * Nombre de la accion
     */
    public String            _nombre;
    /**
     * Vector de parametros
     */
    public Vector<Parametro> _param;
    /**
     * Plugin al que pertenece la accion
     */
    public Plugin            _plugin;
    /**
     * Vector con los resultados que arroja la ejecucion de la accion
     */
    public Vector<Parametro> _resultados;
    /**
     * Se realiza cuando esta instalado o desinstalado
     */
    public String            _tipo;    // instalado o desinstalado

    /**
     * Constructor de la clase Accion
     */
    public Accion() {
        _param      = new Vector();
        _resultados = new Vector();
    }

    /**
     * Constructor de la clase Accion
     * @param tipo tipo de accion
     * @param plugin Plugin al que pertenece la accion
     */
    public Accion(String tipo, Plugin plugin) {
        _tipo       = tipo;
        _param      = new Vector();
        _plugin     = plugin;
        _resultados = new Vector();
    }

    /**
     * Constructor de la clase Accion
     * @param nombre Nombre de la accion
     * @param tipo Tipo de la accion: instalado o desinstalado
     * @param plugin Plugin del que forma parte la accion
     */
    public Accion(String nombre, String tipo, Plugin plugin) {
        _nombre     = nombre;
        _tipo       = tipo;
        _param      = new Vector();
        _plugin     = plugin;
        _resultados = new Vector();
    }

    /**
     * Constructor de la clase Accion
     * @param nombre Nombre la accion
     * @param param Vector de parametros
     * @param tipo Tipo de la accion: instalado o desinstalado
     * @param plugin Pluign del que forma parte el plugin
     */
    public Accion(String nombre, Parametro param, String tipo, Plugin plugin) {
        _nombre = nombre;
        _param.add(param);
        _tipo       = tipo;
        _param      = new Vector();
        _plugin     = plugin;
        _resultados = new Vector();
    }

     /**
     * Constructor de la clase Accion
     * @param nombre Nombre la accion
     * @param param Vector de parametros
     * @param tipo Tipo de la accion: instalado o desinstalado
     * @param plugin Pluign del que forma parte el plugin
     */
    public Accion(String nombre, Vector<Parametro> param, String tipo, Plugin plugin) {
        _nombre = nombre;
        _param  = param;
        _tipo   = tipo;
        _param  = new Vector();
        _plugin = plugin;
    }

    /**
     * Metodo que imprime el conjunto de parametros por salida estandar
     */
    public void printParams() {
        Iterator i = _param.iterator();
        System.out.println("Detecta si el programa esta " + _tipo + ":");
        while (i.hasNext()) {
            Parametro e = (Parametro) i.next();

            e.printParam();
        }
    }

    /**
     * Metodo que devuelve un parametro concreto de la accion
     * @param nombre String que incluye el nombre del parametro buscado
     * @return Parametro devuelto
     */
    public Parametro getParametro(String nombre) {
        Iterator  i          = _param.iterator();
        boolean   encontrado = false;
        Parametro temp       = null;
       
        while (i.hasNext() || encontrado) {
            Parametro e = (Parametro) i.next();

            if (e.getName().compareTo(nombre) == 0) {
                temp = e;
            }
        }

        return temp;
    }
 /**
     * Metodo que devuelve un resultado concreto de la accion
     * @param nombre String que incluye el nombre del parametro buscado
     * @return Resultado devuelto
     */
    public Parametro getResultados(String nombre) {
        Iterator  i          = _resultados.iterator();
        boolean   encontrado = false;
        Parametro temp       = null;


        while (i.hasNext() || encontrado) {
            Parametro e = (Parametro) i.next();

            if (e.getName().compareTo(nombre) == 0) {
                temp = e;
            }
        }

        return temp;
    }

    /**
     * Metodo que imprime el conjunto de parametros por salida estandar
     */
    public void printResultados() {
        Iterator  i          = _resultados.iterator();
        boolean   encontrado = false;
        Parametro temp       = null;

        while (i.hasNext() || encontrado) {
            Parametro e = (Parametro) i.next();

            System.out.println("Parametro:" + e.getName() + "  Resultado " + e.getValue());
        }
    }

    /**
     * Metodo que permite anadir un nuevo parametro a la accion
     * @param param Nuevo parametro a anadir
     */
    public void addParametro(Parametro param) {
        _param.add(param);
    }

    /**
     * Metodo que ejecuta la accion correspondiente
     */
    public void ejecutar() {}
}



